package kayttoliittyma;

import java.awt.event.*;
import opintopaivakirja.*;
import java.util.ArrayList;
import javax.swing.JOptionPane;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.TreeSelectionModel;
import javax.swing.JSplitPane;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import java.util.Date;
import java.text.SimpleDateFormat;
import java.util.Locale;
import javax.swing.BoxLayout;
import javax.swing.ImageIcon;
import javax.swing.tree.DefaultTreeCellRenderer;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreeModel;

import com.lowagie.text.Font;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Toolkit; 

/**
 *
 * @author Erkkinuuttinen
 */
public class Muutos2 extends javax.swing.JFrame implements TreeSelectionListener, WindowListener, WindowFocusListener, WindowStateListener {

    boolean checkPoistetut;
    boolean checkValmiit;
    boolean checkTermipankki;

    /** Creates new form Muutos2
     * @param parent
     * @param kayttaja
     * @param modal
     */
    public Muutos2(javax.swing.JDialog parent, boolean modal, Kayttaja kayttaja) {
        //super(parent, modal);

        this.kayttaja = kayttaja;
        this.kayttaja.haeProjektit();

        initComponents();
		
        jPanelOikea.setLayout(new BoxLayout(jPanelOikea, BoxLayout.Y_AXIS));

        jScrollPaneOikea.getVerticalScrollBar().setUnitIncrement(16);

        // checkboxes : Luetaan arvot valikosta muuttujiin
//        checkTermipankki = jCheckBoxMenuItem1.getState();
//        checkValmiit = jCheckBoxMenuItem2.getState();
//        checkPoistetut = jCheckBoxMenuItem3.getState();

        aloitussivu = new Aloitussivu(this.kayttaja);

        // aloitussivun HAE-nappi
        aloitussivu.jButtonHae.addActionListener(new java.awt.event.ActionListener() {

            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButtonHaeActionPerformed(evt);
            }
        });
        // aloitussivun DI-nappi
        aloitussivu.jButtonDI.addActionListener(new java.awt.event.ActionListener() {

            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });
		this.aktivoiKuuntelijat();
        // Kuuntelija JPuuta varten
        jTreeProjektipuu.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
        jTreeProjektipuu.addTreeSelectionListener(this); //Listen for when the selection changes.

        /*********************************************
         * Projektipuun kuvien asetus
         ********************************************/
//        Haetaan ikonikuvat. Ikonikuvat pitää olla sijoitettuna samaan paikkaan,kuin class-tiedostot.
        ImageIcon lehtiIkoni = createImageIcon("images/lehti.png");
        ImageIcon avattuKansioIkoni = createImageIcon("images/avattuProjekti.png");
        ImageIcon suljettuKansioIkoni = createImageIcon("images/suljettuProjekti.png");

        if (lehtiIkoni != null) {
            DefaultTreeCellRenderer renderer = new DefaultTreeCellRenderer();
            // Tässä vaihessa hylätään ajatus valmiiden ja poistettujen projektien merkitsemisestä suoraan puuhun.
            // Näyttäisi siltä että aivan suoraa tukea tämän kaltaiselle ratkaisulle ei ole.
            // -Teemu

            // Asetetaan renderin tiedot;
            // renderer.setBorderSelectionColor(Color.BLACK); // Asettaa tekstin reunaksi mustan viivan
            renderer.setLeafIcon(lehtiIkoni);
            renderer.setOpenIcon(avattuKansioIkoni);
            renderer.setClosedIcon(suljettuKansioIkoni);
            jTreeProjektipuu.setCellRenderer(renderer);
        } else {
            System.err.println("Leaf icon missing; using default.");
        }

        //jSplitPane1.add(aloitussivu, JSplitPane.RIGHT);

        jPanelOikea.removeAll();
        jPanelOikea.add(aloitussivu);
        jPanelOikea.validate();
        jPanelOikea.updateUI();

        addWindowListener(this);
        addWindowFocusListener(this);
        addWindowStateListener(this);

    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    //////////////////////Toimivat setit koodiin!////////////////////////////////////////////////////
    //jTreeProjektipuu = new javax.swing.JTree(haeProjektitpuu());
    //jSplitPane1 = new javax.swing.JSplitPane(JSplitPane.HORIZONTAL_SPLIT, jTreeProjektipuu, jPanelOikea);
    //add(jSplitPane1);
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jSplitPane1 = new javax.swing.JSplitPane(JSplitPane.HORIZONTAL_SPLIT, jTreeProjektipuu, jPanelOikea);
        jScrollPane2 = new javax.swing.JScrollPane();
        jTreeProjektipuu = new javax.swing.JTree(haeProjektitpuu());
        jScrollPaneOikea = new javax.swing.JScrollPane();
        jPanelOikea = new javax.swing.JPanel();
        jMenuBar1 = new javax.swing.JMenuBar();
        jMenu1 = new javax.swing.JMenu();
        jMenuItemUusi = new javax.swing.JMenuItem();
        jMenuItem2 = new javax.swing.JMenuItem();
        jMenuItemTulosta = new javax.swing.JMenuItem();
        jMenuItemExit = new javax.swing.JMenuItem();
        jMenu2 = new javax.swing.JMenu();
        jMenuItemPoistaProjekti = new javax.swing.JMenuItem();
        jMenuItemEtsi = new javax.swing.JMenuItem();
        jMenu3 = new javax.swing.JMenu();
        jMenuItemOmatTiedot = new javax.swing.JMenuItem();
        jMenu5 = new javax.swing.JMenu();
        jMenuItem15 = new javax.swing.JMenuItem();
        jMenu6 = new javax.swing.JMenu();
        jMenuItem19 = new javax.swing.JMenuItem();
        jMenuItem20 = new javax.swing.JMenuItem();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("Opintopäiväkirja v1.0");

        add(jSplitPane1);
        jSplitPane1.setName("jSplitPane1"); // NOI18N

        jScrollPane2.setName("jScrollPane2"); // NOI18N

        jTreeProjektipuu.setName("jTreeProjektipuu"); // NOI18N
        jTreeProjektipuu.addTreeSelectionListener(new javax.swing.event.TreeSelectionListener() {
            public void valueChanged(javax.swing.event.TreeSelectionEvent evt) {
                jTreeProjektipuuValueChanged(evt);
            }
        });
        jScrollPane2.setViewportView(jTreeProjektipuu);

        jSplitPane1.setLeftComponent(jScrollPane2);

        jScrollPaneOikea.setName("jScrollPaneOikea"); // NOI18N

        jPanelOikea.setName("jPanelOikea"); // NOI18N

        javax.swing.GroupLayout jPanelOikeaLayout = new javax.swing.GroupLayout(jPanelOikea);
        jPanelOikea.setLayout(jPanelOikeaLayout);
        jPanelOikeaLayout.setHorizontalGroup(
            jPanelOikeaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 992, Short.MAX_VALUE)
        );
        jPanelOikeaLayout.setVerticalGroup(
            jPanelOikeaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 569, Short.MAX_VALUE)
        );

        jScrollPaneOikea.setViewportView(jPanelOikea);

        jSplitPane1.setRightComponent(jScrollPaneOikea);

        jMenuBar1.setName("jMenuBar1"); // NOI18N

        jMenu1.setText("Tiedosto");
        jMenu1.setName("jMenu1"); // NOI18N

        jMenuItemUusi.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_N, java.awt.event.InputEvent.CTRL_MASK));
        jMenuItemUusi.setText("Luo projekti");
        jMenuItemUusi.setToolTipText("Luo uusi projekti");
        jMenuItemUusi.setName("jMenuItemUusi"); // NOI18N
        jMenuItemUusi.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jMenuItemUusiActionPerformed(evt);
            }
        });
        jMenu1.add(jMenuItemUusi);

        jMenuItem2.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_S, java.awt.event.InputEvent.CTRL_MASK));
        jMenuItem2.setText("Tallenna");
        jMenuItem2.setToolTipText("Tallenna kaikki projektit");
        jMenuItem2.setName("jMenuItem2"); // NOI18N
        jMenuItem2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jMenuItem2ActionPerformed(evt);
            }
        });
        jMenu1.add(jMenuItem2);

        jMenuItemTulosta.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_P, java.awt.event.InputEvent.CTRL_MASK));
        jMenuItemTulosta.setText("Tulosta");
        jMenuItemTulosta.setToolTipText("Tulosta aktiivinen projekti");
        jMenuItemTulosta.setName("jMenuItemTulosta"); // NOI18N
        jMenuItemTulosta.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jMenuItemTulostaActionPerformed(evt);
            }
        });
        jMenu1.add(jMenuItemTulosta);

        jMenuItemExit.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_Q, java.awt.event.InputEvent.CTRL_MASK));
        jMenuItemExit.setText("Poistu");
        jMenuItemExit.setToolTipText("Poistu ohjelmasta");
        jMenuItemExit.setName("jMenuItemExit"); // NOI18N
        jMenuItemExit.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jMenuItemExitActionPerformed(evt);
            }
        });
        jMenu1.add(jMenuItemExit);

        jMenuBar1.add(jMenu1);

        jMenu2.setText("Muokkaa");
        jMenu2.setToolTipText("Siirry hakuikkunaan");
        jMenu2.setName("jMenu2"); // NOI18N

        jMenuItemPoistaProjekti.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_DELETE, 0));
        jMenuItemPoistaProjekti.setText("Poista");
        jMenuItemPoistaProjekti.setName("jMenuItemPoistaProjekti"); // NOI18N
        jMenuItemPoistaProjekti.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jMenuItemPoistaProjektiActionPerformed(evt);
            }
        });
        jMenu2.add(jMenuItemPoistaProjekti);

        jMenuItemEtsi.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_F, java.awt.event.InputEvent.CTRL_MASK));
        jMenuItemEtsi.setText("Hae");
        jMenuItemEtsi.setToolTipText("Siirry hakuikkunaan");
        jMenuItemEtsi.setName("jMenuItemEtsi"); // NOI18N
        jMenuItemEtsi.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jMenuItemEtsiActionPerformed(evt);
            }
        });
        jMenu2.add(jMenuItemEtsi);

        jMenuBar1.add(jMenu2);

        jMenu3.setText("Asetukset");
        jMenu3.setName("jMenu3"); // NOI18N

        jMenuItemOmatTiedot.setText("Omat tiedot");
        jMenuItemOmatTiedot.setToolTipText("Muokkaa omia tietoja");
        jMenuItemOmatTiedot.setName("jMenuItemOmatTiedot"); // NOI18N
        jMenuItemOmatTiedot.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jMenuItemOmatTiedotActionPerformed(evt);
            }
        });
        jMenu3.add(jMenuItemOmatTiedot);

        jMenuBar1.add(jMenu3);

        jMenu5.setText("Lisää");
        jMenu5.setName("jMenu5"); // NOI18N

        jMenuItem15.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_F3, 0));
        jMenuItem15.setText("Yleismuistiinpano");
        jMenuItem15.setName("jMenuItem15"); // NOI18N
        jMenu5.add(jMenuItem15);

        jMenuBar1.add(jMenu5);

        jMenu6.setText("Apua");
        jMenu6.setName("jMenu6"); // NOI18N

        jMenuItem19.setText("Ohje");
        jMenuItem19.setToolTipText("Siirry ohjeisiin");
        jMenuItem19.setName("jMenuItem19"); // NOI18N
        jMenuItem19.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jMenuItem19ActionPerformed(evt);
            }
        });
        jMenu6.add(jMenuItem19);

        jMenuItem20.setText("Tietoa ohjelmasta");
        jMenuItem20.setToolTipText("Ohjelman tiedot");
        jMenuItem20.setName("jMenuItem20"); // NOI18N
        jMenu6.add(jMenuItem20);

        jMenuBar1.add(jMenu6);

        setJMenuBar(jMenuBar1);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jSplitPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 1024, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jSplitPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 571, Short.MAX_VALUE)
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents
	
	//--------------------------------------------- alas ------------------------------------------------
	private void aktivoiKuuntelijat() {
		// aloitussivun MBA-nappi          
		aloitussivu.jButtonMBA.addActionListener(new java.awt.event.ActionListener() {  
		
			public void actionPerformed(java.awt.event.ActionEvent evt) {                  
			jButtonMBAActionPerformed(evt);             
			}          
		}); 
		// aloitussivun JOKO-nappi        
		aloitussivu.jButtonJOKO.addActionListener(new java.awt.event.ActionListener() {  
		            
			public void actionPerformed(java.awt.event.ActionEvent evt) {                   
			jButtonJOKOActionPerformed(evt);               
			}         
		}); 
		// aloitussivun yleinen-nappi         
		aloitussivu.jButtonYleinen.addActionListener(new java.awt.event.ActionListener() {

			public void actionPerformed(java.awt.event.ActionEvent evt) {
			jButtonYleinenActionPerformed(evt);
			}
		});
	}
	
	private void jLabelEkaMouseClicked(java.awt.event.MouseEvent evt) {         
		String projnimi = aloitussivu.top5Projektit.get(0).getNimi();          
		
		System.out.println("Etusivu TOP5 Projekti " + projnimi);        
		int paikka = 0;  
        
		for (int i = 0; i < kayttaja.getProjektit().size(); ++i) {              
			if (projnimi.equals(kayttaja.getProjektit().get(i).getNimi())) {                  
				aktiivinenProjekti = kayttaja.getProjektit().get(i); 
			// kopioidaan valittu eli aktiivinen projekti luokkamuuttujaan.                   
				paikka = i;              
			}          
		} 
		//TiedotJaMuistiinpanot projekti;       
		TjMprojekti = new TiedotJaMuistiinpanot(kayttaja, kayttaja.getProjektit(), paikka);  
		    
		//jSplitPane1.add(TjMprojekti, JSplitPane.RIGHT);         
		jPanelOikea.removeAll();         
		jPanelOikea.add(TjMprojekti);         
		jPanelOikea.validate();          
		jPanelOikea.updateUI();           
		
		this.paivitaOikeaPanel();
	}
	
	
	
	//------------------------------------ ylös ----------------------------------------------------------
	
    private void jButtonTallennaActionPerformed(java.awt.event.ActionEvent evt) {
        // kuuntelija tiedotjamuistiinpanot tallenna-nappi
        //    System.out.println("jButtonTallennaProjekti() : Muutos 2");
        this.tallennaProjekti();
    }

    private void jMenuItemUusiActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItemUusiActionPerformed

        Date today = new Date();
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd", Locale.GERMANY);
        String tanaan = formatter.format(today);

        Projekti tmp = new Projekti("", "", "", "", 0, 0, 0, 0, java.sql.Date.valueOf(tanaan), java.sql.Date.valueOf("2010-11-20"));

        formatter = new SimpleDateFormat("yyyy-MM-dd H:mm:ss", Locale.GERMANY);
        tanaan = formatter.format(today);
        tmp.setPvm_paivitetty(java.sql.Timestamp.valueOf(String.valueOf(tanaan)));

        kayttaja.getProjektit().add(tmp);

        int paikka = kayttaja.getProjektit().size();

        TjMprojekti = new TiedotJaMuistiinpanot(kayttaja, kayttaja.getProjektit(), --paikka);

        //jSplitPane1.add(TjMprojekti, JSplitPane.RIGHT);

        jPanelOikea.removeAll();
        jPanelOikea.add(TjMprojekti);
        jPanelOikea.validate();
        jPanelOikea.updateUI();

        this.paivitaOikeaPanel();

        // UUSI PROJEKTI KUUNTELIJAT
        // kuuntelija lomakkeen tallennusnapille
        TjMprojekti.jButtonTallenna.addActionListener(new java.awt.event.ActionListener() {

            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButtonTallennaActionPerformed(evt);
            }
        });

        // kuuntelija componentin lisaamiseen tavoitepaneeliin
        TjMprojekti.jPanelMuistiinpanot.addContainerListener(new java.awt.event.ContainerAdapter() {

            @Override
            public void componentAdded(java.awt.event.ContainerEvent evt) {
                jPanelMuistiinpanotComponentAdded(evt);
            }
        });

}//GEN-LAST:event_jMenuItemUusiActionPerformed

    private void jMenuItemTulostaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItemTulostaActionPerformed
// aktiivinen projekti muuttujasta saadaan valittuna oleva projekti
        new TulostusMuokkaus(this, rootPaneCheckingEnabled, kayttaja, aktiivinenProjekti).setVisible(true);
}//GEN-LAST:event_jMenuItemTulostaActionPerformed

    private void jMenuItemExitActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItemExitActionPerformed
        int vaste = JOptionPane.showConfirmDialog(this, "Haluatko varmasti lopettaa?", "Ohjelman lopetus", WIDTH); //showConfirmDialog(this, "Haluatko varmasti lopettaa?");
        System.out.println("Vaste: " + vaste);
        if (vaste == 0) {
            System.exit(1);
        }
        new Tietokanta().sammutaTietokanta();
    // TODO Tallennuskysymys poistuttaessa jos tarpeen
}//GEN-LAST:event_jMenuItemExitActionPerformed

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {

        kayttaja.lisaaTemplate(2); // DI-tutkinto

        // disabloi nappi
        aloitussivu.jButtonDI.setEnabled(false);

        // paivitetään käyttäjän projektit kannasta olioon
        kayttaja.haeProjektit();

        // päivitetään puu
        TreeModel model = new DefaultTreeModel(haeProjektitpuu());
        jTreeProjektipuu.setModel(model);
        jSplitPane1.setLeftComponent(jTreeProjektipuu);

        // päivitetään pääsivu
        aloitussivu = new Aloitussivu(this.kayttaja);
        //jSplitPane1.add(aloitussivu, JSplitPane.RIGHT);

        jPanelOikea.removeAll();
        jPanelOikea.add(aloitussivu);
        jPanelOikea.validate();
        jPanelOikea.updateUI();

    // System.out.println("Etusivun DI-nappi kuuntelija.");

    }
	//------------------------------------ alas ----------------------------------------------------------
	private void jButtonMBAActionPerformed(java.awt.event.ActionEvent evt) {  
	         
		kayttaja.lisaaTemplate(4); // MBA-tutkinto  
	
		// disabloi nappi           
		aloitussivu.jButtonMBA.setEnabled(false);          
	
		// paivitetään käyttäjän projektit kannasta olioon          
		kayttaja.haeProjektit();         
	
		// päivitetään puu          
		TreeModel model = new DefaultTreeModel(haeProjektitpuu());        
		jTreeProjektipuu.setModel(model);        
		jSplitPane1.setLeftComponent(jTreeProjektipuu);  
	
		// päivitetään pääsivu          
		aloitussivu = new Aloitussivu(this.kayttaja);          
		//jSplitPane1.add(aloitussivu, JSplitPane.RIGHT);         
	
		jPanelOikea.removeAll();           
		jPanelOikea.add(aloitussivu);         
		jPanelOikea.validate();          
		jPanelOikea.updateUI();     
		// System.out.println("Etusivun MBA-nappi kuuntelija.");      
	} 
	private void jButtonJOKOActionPerformed(java.awt.event.ActionEvent evt) {  
	         
		kayttaja.lisaaTemplate(5); // JOKO-tutkinto  
	
		// disabloi nappi           
		aloitussivu.jButtonJOKO.setEnabled(false);          
	
		// paivitetään käyttäjän projektit kannasta olioon          
		kayttaja.haeProjektit();         
	
		// päivitetään puu          
		TreeModel model = new DefaultTreeModel(haeProjektitpuu());        
		jTreeProjektipuu.setModel(model);        
		jSplitPane1.setLeftComponent(jTreeProjektipuu);  
	
		// päivitetään pääsivu          
		aloitussivu = new Aloitussivu(this.kayttaja);          
		//jSplitPane1.add(aloitussivu, JSplitPane.RIGHT);         
	
		jPanelOikea.removeAll();           
		jPanelOikea.add(aloitussivu);         
		jPanelOikea.validate();          
		jPanelOikea.updateUI();     
		// System.out.println("Etusivun JOKO-nappi kuuntelija.");      
	}
    private void jButtonYleinenActionPerformed(java.awt.event.ActionEvent evt) {  
	         
		kayttaja.lisaaTemplate(3); // Yleinen-tutkinto  
	
		// disabloi nappi           
		aloitussivu.jButtonJOKO.setEnabled(false);          
	
		// paivitetään käyttäjän projektit kannasta olioon          
		kayttaja.haeProjektit();         
	
		// päivitetään puu          
		TreeModel model = new DefaultTreeModel(haeProjektitpuu());        
		jTreeProjektipuu.setModel(model);        
		jSplitPane1.setLeftComponent(jTreeProjektipuu);  
	
		// päivitetään pääsivu          
		aloitussivu = new Aloitussivu(this.kayttaja);          
		//jSplitPane1.add(aloitussivu, JSplitPane.RIGHT);         
	
		jPanelOikea.removeAll();           
		jPanelOikea.add(aloitussivu);         
		jPanelOikea.validate();          
		jPanelOikea.updateUI();     
		// System.out.println("Etusivun JOKO-nappi kuuntelija.");      
	}

	// Tästä puuttuu vielä muutama nappi... testataan toimiiko
	
	//------------------------------------ ylös ----------------------------------------------------------
    private void jButtonHaeActionPerformed(java.awt.event.ActionEvent evt) {

        new HakuIkkuna(this, rootPaneCheckingEnabled, kayttaja).setVisible(true);
		//Get the screen size          
		Toolkit toolkit = Toolkit.getDefaultToolkit();           
		Dimension screenSize = toolkit.getScreenSize();          
		
		HakuIkkuna hae = new HakuIkkuna(this, rootPaneCheckingEnabled, kayttaja);        
		//Calculate the frame location           
		int x = (screenSize.width - hae.getWidth()) / 2;           
		int y = (screenSize.height - hae.getHeight()) / 2;           
		//Set the new frame location          
		hae.setLocation(x, y); 
    // System.out.println("Etusivun HAE-nappi kuuntelija.");

    }

    private void paivitaOikeaPanel() {
        // System.out.println("päivitaOikeaPuu() : Muutos2");
        jScrollPaneOikea.validate();
        jScrollPaneOikea.updateUI();
    }

    private void jPanelMuistiinpanotComponentAdded(java.awt.event.ContainerEvent evt) {
        ///System.out.println("Component Added : Muutos2");
        this.paivitaOikeaPanel();
    }

    private void jMenuItemOmatTiedotActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItemOmatTiedotActionPerformed
        //LuoTunnus tunnus = new LuoTunnus(this, rootPaneCheckingEnabled, kayttaja);
		//tunnus.setLocation(300, 50);
        //tunnus.setVisible(true);
        Toolkit toolkit = Toolkit.getDefaultToolkit();
				Dimension screenSize = toolkit.getScreenSize();

                LuoTunnus tunnus = new LuoTunnus(this, rootPaneCheckingEnabled, kayttaja);

				int x = (screenSize.width - tunnus.getWidth()) / 2;
				int y = (screenSize.height - tunnus.getHeight()) / 2;
				tunnus.setLocation(x, y);
                tunnus.setVisible(true);
}//GEN-LAST:event_jMenuItemOmatTiedotActionPerformed

    private void jMenuItem2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem2ActionPerformed
        // Projektin tallennus Valikosta
        this.tallennaProjekti();
    }//GEN-LAST:event_jMenuItem2ActionPerformed

    private void tallennaProjekti() {

        // tallennetaan projekti
        TjMprojekti.tallennaProjekti();

        // paivitetään käyttäjän projektit kannasta olioon
        kayttaja.haeProjektit();

        // päivitetään puu
        TreeModel model = new DefaultTreeModel(haeProjektitpuu());
        jTreeProjektipuu.setModel(model);
        jSplitPane1.setLeftComponent(jTreeProjektipuu);

        this.paivitaOikeaPanel();
    }

    private void jMenuItem19ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem19ActionPerformed
        // TODO OHJE
        BareBonesBrowserLaunch.openURL("http://www.students.tut.fi/~jonkkart/opintopaivakirja/manuaali.pdf");
    }//GEN-LAST:event_jMenuItem19ActionPerformed

    private void jMenuItemEtsiActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItemEtsiActionPerformed
        Toolkit toolkit = Toolkit.getDefaultToolkit();
				Dimension screenSize = toolkit.getScreenSize();
				
                HakuIkkuna haku = new HakuIkkuna(this, rootPaneCheckingEnabled, kayttaja);
				
				int x = (screenSize.width - haku.getWidth()) / 2;
				int y = (screenSize.height - haku.getHeight()) / 2;
				haku.setLocation(x, y);
                haku.setVisible(true);
        //new HakuIkkuna(this, rootPaneCheckingEnabled, kayttaja).setVisible(true);
    }//GEN-LAST:event_jMenuItemEtsiActionPerformed

    private void jTreeProjektipuuValueChanged(javax.swing.event.TreeSelectionEvent evt) {//GEN-FIRST:event_jTreeProjektipuuValueChanged
        this.valueChanged(evt);
    // System.out.println("Uusi puukuuntelija");
    }//GEN-LAST:event_jTreeProjektipuuValueChanged

    private void jMenuItemPoistaProjektiActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItemPoistaProjektiActionPerformed
        System.out.println("poisto");
        aktiivinenProjekti.setTila(-1);
        aktiivinenProjekti.deleteProjekti();
        //TjMprojekti.tallennaProjekti();
        this.validate();
        this.validateTree();
		this.tallennaProjekti();   
        System.out.println("poistuiko");
        //this.jTreeProjektipuuValueChanged();
        //this.paivitaOikeaPanel();   
        // TODO: aktiivisen projektin poistaminen
        // TODO add your handling code here:
    }//GEN-LAST:event_jMenuItemPoistaProjektiActionPerformed

    /**
     * @param args the command line arguments
    //    */
    private DefaultMutableTreeNode haeProjektitpuu() {
        Projekti tmp = new Projekti();
        ArrayList<Projekti> projektit = new ArrayList<Projekti>();

        for (Projekti projekti : kayttaja.getProjektit()) {
            projektit.add(projekti);
        }

        projektit = tmp.jarjestaProjektit(projektit);

        DefaultMutableTreeNode juuri = new DefaultMutableTreeNode("Pääsivu");
        DefaultMutableTreeNode node1 = null;
        DefaultMutableTreeNode node2 = null;
        DefaultMutableTreeNode node3 = null;
        DefaultMutableTreeNode node4 = null;
        DefaultMutableTreeNode node5 = null;

        // Ruma, mutta tukee projekteja 5. tasoon asti
        for (Projekti projekti1 : projektit) {
//            if (projekti1.getNimi().equals("Termipankki") && checkTermipankki == false) {
//            } else {
            node1 = new DefaultMutableTreeNode(projekti1.getNimi());
//            }

            for (Projekti projekti2 : projekti1.getLapsiprojektit()) {
                node2 = new DefaultMutableTreeNode(projekti2.getNimi());

                for (Projekti projekti3 : projekti2.getLapsiprojektit()) {
                    node3 = new DefaultMutableTreeNode(projekti3.getNimi());

                    for (Projekti projekti4 : projekti3.getLapsiprojektit()) {
                        node4 = new DefaultMutableTreeNode(projekti4.getNimi());

                        for (Projekti projekti5 : projekti4.getLapsiprojektit()) {
                            node5 = new DefaultMutableTreeNode(projekti5.getNimi());
                            node4.add(node5);
                        }
                        node3.add(node4);
                    }
                    node2.add(node3);
                }
                node1.add(node2);
            }
            juuri.add(node1);
        }

        return juuri;
    }

    /** Returns an ImageIcon, or null if the path was invalid.
     * @param path on polku kuville
     * @return
     */
    protected static ImageIcon createImageIcon(String path) {
        java.net.URL imgURL = Muutos2.class.getResource(path);
        if (imgURL != null) {
            return new ImageIcon(imgURL);
        } else {
            System.err.println("Couldn't find file: " + path);
            return null;
        }
    }

    /** Required by TreeSelectionListener interface. */
    public void valueChanged(TreeSelectionEvent e) {

        //System.out.println("Puusta kuului klikkaus");
		//---------------------------------------------------- huom huom tämä rikkoo muistiinpanojen tallennuksen
		// Tallennetaan projekti kun klikataaa puuta                 
		//if (TjMprojekti != null) {             
		//	TjMprojekti.tallennaProjekti();           
		//} 
		
        DefaultMutableTreeNode node = (DefaultMutableTreeNode) jTreeProjektipuu.getLastSelectedPathComponent();

        if (node == null) {
            return;
        }

        Object objekti = node.getUserObject();
        //System.out.println("objekti, jota klikattiin: " + objekti.toString());
        //System.out.println("polku, jota klikattiin: " + node.getUserObjectPath());

        String lehti = objekti.toString();

        if (lehti.equals("Pääsivu")) {
            Aloitussivu eka = new Aloitussivu(this.kayttaja);
            //jSplitPane1.add(eka, JSplitPane.RIGHT);

            jPanelOikea.removeAll();
            jPanelOikea.add(eka);
			//jPanelOikea.add(aloitussivu);
            jPanelOikea.validate();
            jPanelOikea.updateUI();
			this.aktivoiKuuntelijat();
			
            // TODO mitä tehdään jos ei projekti valittuna
            System.out.println("aktiivinen projekti nulliksi");
            aktiivinenProjekti = null;

        } else {

            int paikka = 0;

            for (int i = 0; i < kayttaja.getProjektit().size(); ++i) {
                if (lehti.equals(kayttaja.getProjektit().get(i).getNimi())) {
                    aktiivinenProjekti = kayttaja.getProjektit().get(i); // kopioidaan valittu eli aktiivinen projekti luokkamuuttujaan.
                    paikka = i;
                }
            }

            //TiedotJaMuistiinpanot projekti;
            TjMprojekti = new TiedotJaMuistiinpanot(kayttaja, kayttaja.getProjektit(), paikka);

            //jSplitPane1.add(TjMprojekti, JSplitPane.RIGHT);
            jPanelOikea.removeAll();
            jPanelOikea.add(TjMprojekti);
            jPanelOikea.validate();
            jPanelOikea.updateUI();

            this.paivitaOikeaPanel();

            // VANHA PROJEKTI KUUNTELIJAT
            // kuuntelija lomakkeen tallennusnapille
            TjMprojekti.jButtonTallenna.addActionListener(new java.awt.event.ActionListener() {

                public void actionPerformed(java.awt.event.ActionEvent evt) {
                    jButtonTallennaActionPerformed(evt);
                }
            });

            // kuuntelija componentin lisaamiseen tavoitepaneeliin
            TjMprojekti.jPanelMuistiinpanot.addContainerListener(new java.awt.event.ContainerAdapter() {

                @Override
                public void componentAdded(java.awt.event.ContainerEvent evt) {
                    jPanelMuistiinpanotComponentAdded(evt);
                }
            });
        }
    }

    /**
     *
     * @param args
     */
    public static void main(String args[]) {

        try {
            // Set Nimbus
            UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
        } catch (UnsupportedLookAndFeelException e) {
            // handle exception
        } catch (ClassNotFoundException e) {
            // handle exception
        } catch (InstantiationException e) {
            // handle exception
        } catch (IllegalAccessException e) {
            // handle exception
        }

        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {
				Toolkit toolkit = Toolkit.getDefaultToolkit();
				Dimension screenSize = toolkit.getScreenSize();
				
                Kirjautuminen dialog = new Kirjautuminen(new javax.swing.JFrame(), true);
				
				int x = (screenSize.width - dialog.getWidth()) / 2;
				int y = (screenSize.height - dialog.getHeight()) / 2;
				dialog.setLocation(x, y);
				
                dialog.addWindowListener(new java.awt.event.WindowAdapter() {

                    public void windowClosing(java.awt.event.WindowEvent e) {
                        System.exit(0);
                    }
                });
                dialog.setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JMenu jMenu1;
    private javax.swing.JMenu jMenu2;
    private javax.swing.JMenu jMenu3;
    private javax.swing.JMenu jMenu5;
    private javax.swing.JMenu jMenu6;
    private javax.swing.JMenuBar jMenuBar1;
    private javax.swing.JMenuItem jMenuItem15;
    private javax.swing.JMenuItem jMenuItem19;
    private javax.swing.JMenuItem jMenuItem2;
    private javax.swing.JMenuItem jMenuItem20;
    private javax.swing.JMenuItem jMenuItemEtsi;
    private javax.swing.JMenuItem jMenuItemExit;
    private javax.swing.JMenuItem jMenuItemOmatTiedot;
    private javax.swing.JMenuItem jMenuItemPoistaProjekti;
    private javax.swing.JMenuItem jMenuItemTulosta;
    private javax.swing.JMenuItem jMenuItemUusi;
    private javax.swing.JPanel jPanelOikea;
    private javax.swing.JScrollPane jScrollPane2;
    private javax.swing.JScrollPane jScrollPaneOikea;
    private javax.swing.JSplitPane jSplitPane1;
    private javax.swing.JTree jTreeProjektipuu;
    // End of variables declaration//GEN-END:variables
    private Kayttaja kayttaja;
    private Projekti aktiivinenProjekti;
    private TiedotJaMuistiinpanot TjMprojekti;
    private Aloitussivu aloitussivu;

    public void windowOpened(WindowEvent e) {
        System.out.println("moro!");
    //throw new UnsupportedOperationException("Not supported yet.");
    }

    public void windowClosing(WindowEvent e) {
		this.tallennaProjekti();         
		JOptionPane.showMessageDialog(this, "Ohjelma sulkeutuu, tiedot tallennetaan.");
		//(this, "Haluatko varmasti lopettaa?", "Ohjelman lopetus", JOptionPane.NO_OPTION); 
		//showConfirmDialog(this, "Haluatko varmasti lopettaa?");         
		
		System.exit(1);       
		
		new Tietokanta().sammutaTietokanta(); 
        //throw new UnsupportedOperationException("Not supported yet.");
    }

    public void windowClosed(WindowEvent e) {
        //throw new UnsupportedOperationException("Not supported yet.");
    }

    public void windowIconified(WindowEvent e) {

        //throw new UnsupportedOperationException("Not supported yet.");
    }

    public void windowDeiconified(WindowEvent e) {

        //throw new UnsupportedOperationException("Not supported yet.");
    }

    public void windowActivated(WindowEvent e) {

        //throw new UnsupportedOperationException("Not supported yet.");
    }

    public void windowDeactivated(WindowEvent e) {
//        throw new UnsupportedOperationException("Not supported yet.");
    }

    public void windowGainedFocus(WindowEvent e) {
//        throw new UnsupportedOperationException("Not supported yet.");
    }

    public void windowLostFocus(WindowEvent e) {
//        throw new UnsupportedOperationException("Not supported yet.");
    }

    public void windowStateChanged(WindowEvent e) {
        // throw new UnsupportedOperationException("Not supported yet.");
    }
}
